Virtual machines (VMs) running on a host computer may use one or more processing units to perform graphics operations. Various virtual devices are presented to each VM by the underlying virtualization software. For example, the virtualization software may present a virtual graphics processing unit (or “VGPU”) to a VM. The VGPU is a software abstraction of a physical graphics processing unit (“GPU”) device. The functionality of the VGPU is defined by software routines that are a part of the virtualization software as well as any physical devices, such as physical, or host GPUs (or “HGPUs”) and associated drivers that support the VGPU operation. The virtualization software can be viewed as a layer of indirection, wherein VGPU requests from the VM are received by the virtualization software and redirected to a host GPU.
VMs running on the host may request that the processing unit(s) perform identical operations on graphics resources. For example, multiple VMs may submit identical requests to compile a shader, fetch a texture, encode a bitmap, compress a bitmap, or perform another set of one or more operations on the same data. The VMs, however, share the processing units in a manner that is transparent to each of the VMs. In other words, the VMs do not know which graphics operations and data are being sent to the processing unit(s) by other VMs. As a result, redundant graphics operations are sent to and executed by the processing unit(s).